<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>数组测试</title>
</head>

<body>

    <script>
        // 1. 给一个数组, 清空数组
        let arr = [1, 2, 3, 4, 5, 6]
        arr = []
        console.log(arr)
        // 2. 在数组的末尾, 新增两个元素
        let arr1 = [12, 13]
        let temp = [14, 15]
        arr1.push(...temp)
        console.log(arr1)
        //3. 在数组的开头新增两个元素
        let arr2 = [10, 11]
        let before = [8, 9]
        arr2.unshift(...before)
        console.log(arr2)
        // 4. 把数组最后一个元素删除掉
        let arr3 = [1, 2, 3, 4]
        arr3.pop()
        console.log(arr3)
        // 5. 把数组第一个元素删除掉
        let arr4 = [1, 2, 3, 4]
        arr4.shift()
        console.log(arr4)
        // 6.给定数组[1,2,3,4,5,6]，把数组中的3移除掉，返回新数组[1,2,4,5,6]
        let arr5 = [1, 2, 3, 4, 5, 6]
        var pos = arr5.indexOf(3);
        let removeItems = arr5.splice(pos, 1)
        console.log(...arr5)
        /* 7.给定数组[1,2,3,4,5,6]，把数组中的3移除掉并且在原本3的位置增
        加新元素8，最后返回新数组[1,2,8,4,5,6] */
        let arr6 = [1, 2, 3, 4, 5, 6]
        let removeItems2 = arr6.splice(2, 1, 8) //开始位置,0为追加,非0为替换,8为追加数字
        console.log(...arr6)
        // 8.给定数组[1,2,3,4,5,6]，只保留后两个元素，最终返回新数组[5,6]
        let arr7 = [1, 2, 3, 4, 5, 6]
        arr7.splice(0, 4)
        console.log(...arr7)
        // 9.给定[1,2,3,4,5,6,7]，将数组元素进行翻转，最终返回[7,6,5,4,3,2,1]
        var arr8 = [1, 2, 3, 4, 5, 6, 7]
        for (let i = 0; i < arr8.length / 2; i++) {
            let temp = arr8[i]
            arr8[i] = arr8[arr8.length - 1 - i]
            arr8[arr8.length - 1 - i] = temp;
        }
        console.log(...arr8)
        /* 10.给定一个排序数组，你需要在原地删除重复出现的元素，使得每个元素只出现一次，返回去重后的新数组。
           第10题示例：给定数组：[0,0,1,1,1,2,2,3,3,4] ，最终返回[0,1,2,3,4]
        */
        let arr9 = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4]

        function unique(array) {
            var arr = [];
            for (var i = 0; i < array.length; i++) {
                //如果等于-1，那么也是就是新数组中没有一项和当前数组一样
                if (arr.indexOf(array[i]) === -1) {
                    arr.push(array[i])
                }
            }
            return arr;
        }
        console.log(unique(arr9))
        /* 11.给定一个整数数组，判断是否存在重复元素。
        如果任何值在数组中出现至少两次，函数返回 true。如果数组中每个元素都不相同，则返回 false。
           第11题示例：给定数组[1,2,3,1] 返回true 给定数组[1,2,3,4] 返回false
        */

        let arr10 = [1, 2, 3, 1]

        function repeat(array) {
            //先进行排序
            var nary = array.sort();
            for (var i = 0; i < array.length; i++) {
                /*然后对比相邻的元素,如果一致就判定为有重复项
                   返回true */
                if (nary[i] == nary[i + 1]) {
                    //alert("数组重复内容：" + nary[i]);
                    return true
                } else {
                    //否则返回false
                    return false
                }
            }
        }
        console.log(repeat(arr10))
        /* 12.给定一个整数数组，找出那个只出现了一次的元素。
        第12题示例：给定数组[2,2,1] 返回1 给定数组[4,4,3,3,2]返回2 */
        let arr11 = [4, 4, 3, 3, 2]

        function isOnly(arr) {
            arr.forEach(function (item) {
                if (arr.indexOf(item) === arr.lastIndexOf(item) && arr.indexOf(item) != -1) {
                    console.log(item)
                }
            })
        }
        isOnly(arr11)

        /* 13.给定一个数组 nums，编写一个函数将所有?0?移动到数组的末尾，同时保持非零元素的相对顺序。
        第十三题示例: 给定一个数组[0,1,0,3,12] 返回 [1,3,12,0,0] 给定数组 [0,0,8,5,3] 返回 [8,8,3,0,0]
        */
        var arr12 = [0, 1, 0, 3, 12];

        function moveNums(arr) {
            var arrNew = [];
            for (var i in arr) {
                if (arr[i] !== 0) {
                    arrNew.unshift(arr[i]);
                } else if (arr[i] == 0) {
                    arrNew.push(arr[i]);
                }
            }
            return arrNew;
        }
        var newmove = moveNums(arr12)
        console.log(newmove)
    </script>
</body>

</html>